<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>函数作业</title>
</head>

<body>
  <script>
    //1. 定义函数有几种方式，有什么区别？

    // 定义函数有两种方式，一种是函数声明式，一种是函数表达式
    // 函数声明式的语法：function 名字(形参){代码段}
    // 函数表达式的语法：var 名字=function(形参){代码段}
    // 函数声明式可以在函数前调用，也可以在函数后调用
    // 函数表达式只能在函数后调用

    //2.return 关键字有那两种作用

    // （1）给出返回值。（2）中断函数的执行

    //3.函数实参数和形参个数不等时会发生什么？举例说明

    // 第一种情况，假如实参多于形参时，前面会从左到右依次赋值，多出的实参在函数内没有被接收
    function fn(a, b) {
      console.log(a, b);
    }
    fn(1, 2, 3, 4)
    // 第二种情况，形参多于实参，前面会从左到右依次赋值，多出的形参没有实参赋值，在函数内的时候就是undefined
    function fn2(a, b, c, d) {
      console.log(a, b, c, d);
    }
    fn2(1, 2, 3)

    //4.请定义一个函数，该函数功能为，传入一个值，返回这个值的平方值;

    function square(a) {
      var res = (a *= a)
      console.log(res);
      return res
    }
    square();

    //5.请写出一个函数，功能为：传入 2 个值，则返回其中的最大值；
    // 请再写一个函数，传入 3 个值，返回其中的最大值

    function fn5(a, b) {
      if (a <= b) {
        console.log(b);
      }  else {
        console.log(a);
      }
    }

    fn5(10, 20)

    function fn6(a, b, c) {
      if (a >= b && a >= c) {
        console.log(a);
      } else if (b >= c) {
        console.log(b);
      } else {
        console.log(c);
      }
    }
    fn6(8, 18, 4)
    //6.请定义一个函数，输入一个 N 值，则计算出该值的阶乘，
    // 即：`n! = 1*2*3*4*5*6*...`

    function fn7(a) {
      var res = 1;
      for (var i = a; i > 0; i--) {
        res = res * i;
      }
      console.log(res);
    }
    fn7(4)


  </script>
</body>

</html>